package com.bawei.test

import android.graphics.BitmapFactory
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import com.bawei.test.builder.Computer
import com.bawei.test.strategy.Logger
import com.bawei.test.strategy.LoggerStrategy
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView

class MainActivity : AppCompatActivity() {
    private lateinit var iv:ImageView
    private lateinit var imageView: SubsamplingScaleImageView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        iv = findViewById<ImageView>(R.id.iv)
        imageView = findViewById(R.id.imageView)

        //1:构建者
        var computer = Computer.Builder()
                .setCpu("我的cpu")
                .setKeyboard("我的键盘")
                .build()
        Log.d("ytx", "computer: "+computer)

        //2:策略模式
        var logger = Logger(LoggerStrategy.NET).logger
        logger.d("MainActivity","测试")

        //3:bugly制造异常
//        var result = Utils.chu2(4,0)

        /**
         * 4.glide默认支持三级缓存 二次采样
         * 二次采样原理：当加载大图片到小ImageView中，照片墙，避免内存溢出
         * 第一次采样：只采集宽度和高度，不采集像素，不占内存--->计算缩放比例,必须是2的幂次方：（1000*1000）->(100*100)  10不行，16
         * 第二次采样：按照第一次的缩放比例进行采样，内存占用较少
         *
         */
        toBitmap()
        toBitmapWithTwo()
        /**
         * 5.加载大图长图
         */
        imageView.setImage(ImageSource.resource(R.drawable.shi))

    }


    fun toBitmap(){
        var bitmap = BitmapFactory.decodeResource(resources,R.drawable.xiang)
        Log.d("ytx", "没有采样:${bitmap.byteCount} ")

    }
    fun toBitmapWithTwo(){
        //第一次
        var options = BitmapFactory.Options()//参数配置
        options.inJustDecodeBounds = true //只采集边框
        BitmapFactory.decodeResource(resources,R.drawable.xiang,options)
        var imageWith = options.outWidth //原图的宽度
        var imageHeight = options.outHeight //原图的高度
        //计算缩放比例 ：2的幂次方
        var size = 1
        while (imageWith/size > 100 || imageHeight/size > 100){//100,100是ImageView的大小
            size *= 2
        }
        //第二次
        options.inJustDecodeBounds = false //不只采集边框，采集像素点
        options.inSampleSize = size //设置缩放比例
        var bitmap = BitmapFactory.decodeResource(resources,R.drawable.xiang,options)
        Log.d("ytx", "二次采样:${bitmap.byteCount} ")
        iv.setImageBitmap(bitmap)

    }
}